import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 1.加载驱动(Class.forName)
 * 2.获取连接(DriverManager.getConnection)
 * 3.执行sql语句：
 *   (1)Statement  执行不带参数的sql语句（即带？的语句）
 *   (2) PrepareStatement  执行带参数的sql语句
 *   (3) CallableStatement 执行存储过程或函数
 * 4.结果集(ResultSet)处理
 * 5.事务(transaction)
 */
public class Demo1 {
    public static void main(String[] args){
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动
            System.out.println("驱动加载成功！");
            String url="::thin:@192.168.1.102:1521:xe";//连接本机IP地址
            String user="hr";//账号名
            String pwd="123";//密码
            Connection con= DriverManager.getConnection(url,user,pwd);
            System.out.println("连接成功！");
            String sql="create table student("+
                    "stu_name varchar2(20),"+
                    "age integer CHECK (age>0),"+
                    "addr varchar2(100))";
            String sql2="insert into student values('猪八戒1',44,'昆明')";
            String sql3="insert into student values('猪八戒2',-44,'昆明')";
            String sql4="insert into student values('猪八戒3',44,'昆明')";
            System.out.println(sql2);
            Statement stm=con.createStatement();//通过connection数据库链接对象 创建一个statement对象数据库操作对象
            stm.executeUpdate("drop TABLE student");
            stm.executeUpdate(sql);//executeUpdate(String sql)方法发送sql 并返回执行成功的记录的条数
            con.setAutoCommit(false);//事物不自动提交,需要人手动提交
            //con.setAutoCommit(true);是让JDBC自动提交事务
            try {
                stm.executeUpdate(sql2);
                stm.executeUpdate(sql3);
                stm.executeUpdate(sql4);
            } catch (SQLException e) {
                System.err.println(e.getMessage());//输出异常信息（不带追踪）
                con.rollback();//如果有异常就回滚
            }
            stm.close();con.close();//关闭
        } catch (ClassNotFoundException e) {
            //e.printStackTrace();
            System.err.println("找不到驱动！");//用err 则此条信息会红色显示
        } catch (SQLException e){
            //e.printStackTrace();
            System.err.println(e.getMessage());
        }
    }
}
